package com.sky.mapper;

import com.sky.annotation.AutoFill;
import com.sky.entity.DishFlavor;
import com.sky.enumeration.OperationType;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface DishFlavorMapper {
    /**
     * 批量插入口味数据
     *
     * 结局报错分析:dish_flavors类的flavors是一个List集合
     *           当执行到这个语句时，dishFlavorMapper.insertBatch(flavors);
     *           他会检查我们写的insertBatch上是否有AutoFill注解，如果我们加上了注解，他会调用公共字段填充的部分
     *           他会获得到该方法的参数即实体对象，而该方法的参数部分即实体对象是List集合
     *           Object entity = args[0];   entity此时是一个list集合
     *           所以当执行到下面语句的时候，会去List类(ArrayList)里面找SET_CREATE_TIME方法，此时自然是没有的
     *           所以会报错：java.lang.NoSuchMethodException: java.util.ArrayList.setCreateTime(java.time.LocalDateTime)
     *           Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class);
     *
     * @param flavors
     */
    //@AutoFill(OperationType.INSERT)
    void insertBatch(List<DishFlavor> flavors);

    /**
     * 批量删除菜品
     * @param ids
     */
    void deleteByIds(List<Long> ids);

    /**
     * 根据菜品id查询对应的口味数据
     * @param dishId
     * @return
     */
    @Select("select * from dish_flavor where dish_id=#{dishId}")
    List<DishFlavor> getByDishId(long dishId);

    /**
     * 根据菜品id删除对应的口味数据
     * @param dishId
     */
    @Delete("delete from dish_flavor where dish_id = #{dishId}")
    void deleteByDishId(Long dishId);
}